/**
 * 
 * Copyright 2009 Marco Speranza <marco.speranza79@gmail.com>
 *    
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   
 * http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.commons.util.conversion;

/**
 * Classe dedicata alle utilities di gestione della marca temporale. Gestisce
 * sia in ms che in String.
 * 
 * @author Marco Speranza
 */

public class DateConv {

    /**
     * Converte la timestamp in formato stringa-SQL in tempo assoluto espresso
     * in ms dal 1970-01-01 00:00:00 GMT;
     * 
     * @param dataetempo
     *            stringa in formato "yyyy-mm-dd hh:mi:ss[.ms]";
     * @return long ms tempo assoluto in ms calcolato dal 1970-01-01 00:00:00
     *         GMT;
     * @throws IllegalArgumentException
     *             in caso di un formato data errato.
     */
    public static long toms(String dataetempo) throws IllegalArgumentException {
	java.sql.Timestamp ts = java.sql.Timestamp.valueOf(dataetempo);
	long ms = ts.getTime();
	return (ms);
    }

    /**
     * Converte il tempo assoluto espresso in ms dal 1970-01-01 00:00:00 GMT
     * nella timestamp corrispondente in formato stringa-SQL (yyyy-mm-dd
     * hh:mi:ss);
     * 
     * @param ms
     *            tempo assoluto in ms calcolato dal 1970-01-01 00:00:00 GMT;
     * @return dataetempo stringa in formato "yyyy-mm-dd hh:mi:ss";
     */
    public static String toString(long ms) {

	ms /= 1000;
	ms *= 1000;
	java.sql.Timestamp ts = new java.sql.Timestamp(ms);
	String d = ts.toString();
	return (d.substring(0, d.indexOf('.')));
    }

    /**
     * Converte il tempo assoluto espresso in ms dal 1970-01-01 00:00:00 GMT
     * nella timestamp corrispondente in formato stringa-SQL (yyyy-mm-dd
     * hh:mi:ss.ms);
     * 
     * @param ms
     *            tempo assoluto in ms calcolato dal 1970-01-01 00:00:00 GMT;
     * @return dataetempo stringa in formato "yyyy-mm-dd hh:mi:ss.ms";
     */
    public static String toStringMs(long ms) {

	java.sql.Timestamp ts = new java.sql.Timestamp(ms);
	String d = ts.toString();
	return (d);
    }

    /**
     * Ritorna il tempo corrente espresso in ms;
     * 
     * @return long tempo assoluto in ms dell'istante corrente, calcolato dal
     *         1970-01-01 00:00:00 GMT;
     */
    public static long currTimeMs() {

	/* imposta il tempo corrente */
	java.util.Calendar cal = java.util.Calendar.getInstance();
	java.util.Date data = cal.getTime();
	return (data.getTime());
    }

    /**
     * Ritorna il tempo corrente in formato stringa;
     * 
     * @return String timestamp dell'istante corrente in formato stringa-SQL
     *         (yyyy-mm-dd hh:mi:ss);
     */
    public static String currTimeStr() {
	/* imposta il tempo corrente */
	java.util.Calendar cal = java.util.Calendar.getInstance();
	java.util.Date data = cal.getTime();
	long ms = data.getTime();
	return (DateConv.toString(ms));
    }

    /**
     * Ritorna il tempo corrente in formato stringa;
     * 
     * @return String timestamp dell'istante corrente in formato stringa-SQL
     *         (yyyy-mm-dd hh:mi:ss.ms);
     */
    public static String currTimeStrMs() {
	/* imposta il tempo corrente */
	java.util.Calendar cal = java.util.Calendar.getInstance();
	java.util.Date data = cal.getTime();
	long ms = data.getTime();
	return (DateConv.toStringMs(ms));
    }

}
